#include "Compile_Run.hpp"
#include "../Comm/httplib.h"

#include <string>
#include <iostream>

using namespace Compile_Run_NS;
using namespace httplib;

void Usage(const std::string& proc)
{
    std::cerr << "Usgae : " << proc << " port" << std::endl;
}

int main(int argc,char* argv[])
{
    if(argc != 2)
    {
        Usage(argv[0]);
    }

    Server ser;

    // Post用于向服务器提交数据
    ser.Post("/Compile_Run",[](const Request& req, Response& resp){
        // req中的正文就是客户端给我们发送的json串
        std::string in_json = req.body;
        std::string out_json;
        if(!in_json.empty())
        {
            Compile_Run::Start(in_json,&out_json);
            resp.set_content(out_json,"application/json;charset=utf-8");
        }
    });

    ser.listen("0.0.0.0",std::stoi(argv[1]));

    return 0;
}


// // 用于测试
// int main()
// {
//     Server ser;

//     // Get用于向服务器请求数据
//     ser.Get("/Love",[](const Request& req, Response& resp){
//         resp.set_content("I LOVE YOU , 我爱你","text/plain;charset=utf-8");
//     });

//     ser.listen("0.0.0.0",8888);

//     return 0;
// }


// 用于测试
// int main()
// {
//     // 模仿用户提交代码
//     // in_json --> {"code":"用户代码","input":"用户输入","cpu_limit":"时间上限值","mem_limit":"空间上限值(KB)"}
//     // out_json --> {"status":"状态码","reason":"出错原因","stdout":"运行结果","stderr":"错误原因)"}
//     Json::Value in_value;
//     Json::StyledWriter writer;

//     // R"()" raw string 
//     // 前缀为r或R"的字符串,所有的字符都会按照它们字面的样子被解释
//     in_value["code"] = R"(#include <iostream>
//     int main()
//     {
//         std::cout << "I LOVE YOU" << std::endl;
//         // int* p = new int[1024*1024*200];
//         // while(1);
//         // aaaa
//         return 0;
//     })";
//     in_value["cpu_limit"] = 1;
//     in_value["mem_limit"] = 1024 * 100;

//     std::string in_json = writer.write(in_value);
//     std::cout << in_json << std::endl;

//     // 程序返回父Json串
//     std::string out_json;

//     // 编译并运行
//     Compile_Run_NS::Compile_Run::Start(in_json,&out_json);

//     Json::Value out_value;
//     Json::Reader reader;

//     reader.parse(out_json,out_value);
//     std::cout << out_json << std::endl;

//     return 0;
// }